#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : day07_身份运算符.py
# @Time : 2025/7/19 12:58
# -------------------------------
"""
一、身份运算符用来判断2个对象的引用是否为同一个，即用来比较两个对象的内存地址是否相同。

二、python对数字和字符串做了一些优化以提高性能和减少内存开销。以下是python对数字和字符串做的一些优化。
1. 整数池：python会在程序运行时预先创建一些整数对象，并将其保存在整数池中，这样在创建整数对象时，可以重用已存在的对象，而不是创建新的对象。
可以减少内存的开销。
2. 字符串池：对于较短的字符串，python会使用字符串池进行优化。字符串池是一个缓存区，保存这所有共享相同内容的字符串对象。当创建新的字符串对象时，
python会首先检查是否已经存在相同内容的字符串对象，若存在，则直接重用已有的对象，比年重复创建新的对象。
因此：在某些情况下，字面量相同的两个对象，实际上并不是同一个对象，此时需要区分对象，则引用身份运算符。
"""
'''
is:平淡的两个标识符时不时引用自同一个对象；
is not:判断两个标识符时不时引用自不同对象。
'''

def ident_info():
    # s1 = "hello"
    # s2 = 'Hello'
    # print(f"s1:{id(s1)}")
    # print(f"s2:{id(s2)}")
    # # 判断值是否相同
    # print(s1 == s2)
    # print(s1 is s2)
    '''
    执行结果：
    s1:2935298675952
    s2:2935298676016
    False
    False
    '''
    s1 = "Hello,world!!!" * 1000
    s2 = 'Hello,wold!!!' * 1000
    print(f"s1:{id(s1)}")
    print(f"s2:{id(s2)}")
    # 判断值是否相同
    print(s1 == s2)
    print(s1 is s2)
    '''
    运行结果：
    s1:1522350075840
    s2:1522351865616
    False
    False'''

    print(s1 is not s2)     # True

ident_info()